package com.carrot.gateway.uaa;

import com.carrot.common.core.domain.R;
import com.carrot.gateway.entity.ClientCertificate;
import com.carrot.gateway.entity.dto.LoginDto;
import com.carrot.gateway.entity.vo.TokenVo;
import com.carrot.gateway.entity.vo.UserVo;

public interface IUaaRequestService {

    /**
     * 授权码模式获取token
     * @param code 授权码
     * @param redirectUri 重定向uri
     * @param appName 应用名称
     * @return
     */
    R<TokenVo> getTokenByCode(String code, String redirectUri, String appName);


    /**
     * 获取用户信息
     * @param accessToken 访问令牌
     * @return
     */
    R<UserVo> getUser(String accessToken);

    /**
     * 撤销令牌
     * @param token
     * @return
     */
    R<?> revocationToken(String token, ClientCertificate clientCertificate);

    /**
     * 密码模式获取token
     * @param loginDto 登录参数
     * @return R
     */
    R<TokenVo> getTokenByPassword(LoginDto loginDto, ClientCertificate clientCertificate);

    /**
     * 获取手机验证码
     * @param phone 手机号
     * @return R
     */
    R getSmsCaptcha(String phone,ClientCertificate clientCertificate);

    /**
     * 刷新token模式获取token
     * @param refreshToken 刷新token
     * @param clientCertificate 客户端
     * @return R
     */
    R<TokenVo> getTokenByRefreshToken(String refreshToken, ClientCertificate clientCertificate, String clientIp);
}
